package org.example.weather.bigscreen.core.api;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import org.example.weather.bigscreen.core.api.dto.AreaDTO;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * Created on 2022-07-22.
 *
 * @author chenyu
 */
@RequestMapping("area")
@Api(value = "地区信息", tags = {"地区信息"})
public interface AreaApi {
    /**
     * 指定id获取地区信息
     * @param areaId 地区id
     * @return 地区信息
     */
    @GetMapping("{areaId}")
    @ApiOperation(value = "指定id获取地区信息", httpMethod = "GET")
    @ApiResponse(code = 200, message = "接口返回成功")
    AreaDTO selectById(@PathVariable("areaId") String areaId);

    /**
     * 指定id列表获取地区列表
     * @param areaIds 地区id集合
     * @return 指定id列表获取地区列表
     */
    @PostMapping("areas")
    @ApiOperation(value = "指定id列表获取地区列表", httpMethod = "POST")
    @ApiResponse(code = 200, message = "接口返回成功")
    List<AreaDTO> selectByIds(@RequestBody List<String> areaIds);

    /**
     * 归属地区
     * @param areaId 地区id
     * @return 归属地区
     */
    @GetMapping("{areaId}/parent")
    @ApiOperation(value = "归属地区", httpMethod = "GET")
    @ApiResponse(code = 200, message = "接口返回成功")
    AreaDTO selectParent(@PathVariable("areaId") String areaId);

    /**
     * 归属各级地区
     * @param areaId 地区id
     * @return 归属各级地区
     */
    @GetMapping("{areaId}/ancestors")
    @ApiOperation(value = "归属各级地区", httpMethod = "GET")
    @ApiResponse(code = 200, message = "接口返回成功")
    List<AreaDTO> selectAncestors(@PathVariable("areaId") String areaId);

    /**
     * 按行政区级别获取归属地区
     * @param areaId 地区id
     * @param level 归属级别
     * @return 按行政区级别获取归属地区
     */
    @GetMapping("{areaId}/ancestor/{level}")
    @ApiOperation(value = "按行政区级别获取归属地区", httpMethod = "GET")
    @ApiResponse(code = 200, message = "接口返回成功")
    AreaDTO selectAncestor(@PathVariable("areaId") String areaId, @RequestParam("level") Integer level);

    /**
     * 下一级地区列表
     * @param parentId 父级id
     * @return 下一级地区列表
     */
    @GetMapping("parent/{parentId}/areas")
    @ApiOperation(value = "下一级地区列表", httpMethod = "GET")
    @ApiResponse(code = 200, message = "接口返回成功")
    List<AreaDTO> selectByParentId(@PathVariable("parentId") String parentId);

    /**
     * 下辖各级地区
     * @param parentId 父级id
     * @return 下辖各级地区
     */
    @GetMapping("{parentId}/descendants")
    @ApiOperation(value = "下辖各级地区", httpMethod = "GET")
    @ApiResponse(code = 200, message = "接口返回成功")
    List<AreaDTO> selectDescendants(@PathVariable("parentId") String parentId);

    /**
     * 行政级别地区信息
     * @param level 0 省 1 市 2 县
     * @return 指定行政级别地区信息
     */
    @GetMapping("level/{level}/areas")
    @ApiOperation(value = "行政级别地区信息", httpMethod = "GET")
    @ApiResponse(code = 200, message = "接口返回成功")
    List<AreaDTO> selectByLevel(@PathVariable("level") Integer level);

    /**
     * 所有地区信息
     * @return 所有地区信息
     */
    @GetMapping("areas/all")
    @ApiOperation(value = "所有地区信息", httpMethod = "GET")
    @ApiResponse(code = 200, message = "接口返回成功")
    List<AreaDTO> selectAll();

}
